package com.bot.nft.module.cm.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.IdUtil;

import com.alibaba.druid.util.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import com.bot.nft.core.enums.cm.Enum;
import com.bot.nft.module.cm.domain.CmNoticeInfo;
import com.bot.nft.module.cm.domain.bo.CmNoticeInfoBo;
import com.bot.nft.module.cm.domain.vo.CmNoticeInfoVo;
import com.bot.nft.module.cm.mapper.ICmNoticeMapper;
import com.bot.nft.module.cm.service.ICmNoticeService;

import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;

/**
 * 描述: 站内公告业务接口实现类
 * <p>
 * 时间: 2023-11-29 11:29
 * 负责人: 卢梦丽
 **/
@Service
public class CmNoticeServiceImpl extends ServiceImpl<ICmNoticeMapper, CmNoticeInfo> implements ICmNoticeService {

    @Resource
    private ICmNoticeMapper iCmNoticeMapper;

    /**
     * 新增站内公告功能
     *
     * @param noticeCmInfoBo 站内公告信息，包含站内公告标题，类型，内容等
     * @return Boolean 成功/true，失败/false
     */
    @Override
    public Boolean addNoticeCmInfo(CmNoticeInfoBo noticeCmInfoBo) {
        noticeCmInfoBo.setId(IdUtil.getSnowflakeNextIdStr());
        noticeCmInfoBo.setDeleteFlag(0);
        CmNoticeInfo cmNoticeInfo = BeanUtil.toBean(noticeCmInfoBo, CmNoticeInfo.class);
        int insert = iCmNoticeMapper.insert(cmNoticeInfo);
        Boolean msg = false;
        if (insert>=1){
            msg = true;
        }
        return msg;
    }

    /**
     * 修改站内公告功能
     *
     * @param noticeCmInfoBo 站内公告信息，包含站内公告标题，类型，内容等
     * @return Boolean 成功/true，失败/false
     */
    @Override
    public Boolean updateNoticeCmInfo(CmNoticeInfoBo noticeCmInfoBo) {
        noticeCmInfoBo.setUpdateTime(new Date());
        CmNoticeInfo cmNoticeInfo = BeanUtil.toBean(noticeCmInfoBo, CmNoticeInfo.class);
        int i = iCmNoticeMapper.updateById(cmNoticeInfo);

        Boolean msg = false;
        if (i==1){
            msg = true;
        }
        return msg;

    }

    /**
     * 查看站内公告功能
     *
     * @param id 站内公告标识
     * @return 站内公告信息，包含站内公告标题，类型，内容等
     */
    @Override
    public CmNoticeInfoVo getNoticeCmInfo(String id) {

        CmNoticeInfoVo cmNoticeInfoVo = iCmNoticeMapper.selectVoById(id);
        return cmNoticeInfoVo;
    }

    /**
     * 删除站内公告功能
     *
     * @param id 站内公告标识
     * @return Boolean 成功/true，失败/false
     */
    @Override
    public Boolean delNoticeCmInfo(String id) {
        boolean update = this.lambdaUpdate()
                .set(CmNoticeInfo::getDeleteFlag, Enum.ALDEL.getValue())
                .eq(CmNoticeInfo::getId, id)
                .update();

        return update;
    }

    /**
     * 发布站内公告
     *
     * @param id 站内公告标识
     * @return Boolean 成功/true，失败/false
     */
    @Override
    public Boolean issueNoticeCmInfo(String id) {
        boolean update = this.lambdaUpdate()
                .set(CmNoticeInfo::getStatus,Enum.START.getValue())
                .set(CmNoticeInfo::getIssueTime,new Date())
                .eq(CmNoticeInfo::getId, id)
                .update();
        return update;
    }

    /**
     * 禁用站内公告
     *
     * @param id 站内公告标识
     * @return Boolean 成功/true，失败/false
     */
    @Override
    public Boolean disNoticeCmInfo(String id) {
        boolean update = this.lambdaUpdate()
                .set(CmNoticeInfo::getStatus, Enum.END.getValue())
                .eq(CmNoticeInfo::getId, id)
                .update();

        return update;
    }

    /**
     * 分页查询站内公告功能
     *
     * @param keyword  站内公告关键字
     * @param status   站内公告状态(0.禁用 1.启用)
     * @param pageNo   当前页数
     * @param pageSize 每页显示条数
     * @return 站内公告信息*
     */
    @Override
    public Page<CmNoticeInfoVo> queryNoticeByPage(String keyword, Integer status, Integer pageNo, Integer pageSize) {

        //开启分页
        Page<CmNoticeInfo> page = new Page<>(pageNo, pageSize);
        QueryWrapper<CmNoticeInfo> queryWrapper = new QueryWrapper<>();
        //判断关键字不为空
        if (!StringUtils.isEmpty(keyword)) {
            queryWrapper.lambda().like(CmNoticeInfo::getTitle, keyword);
        }
        //判断状态不为空
        if (null != status) {
            queryWrapper.lambda().like(CmNoticeInfo::getStatus, status);
        }
        queryWrapper.lambda().like(CmNoticeInfo::getDeleteFlag,Enum.NODEL.getValue());
        queryWrapper.lambda().orderByDesc(CmNoticeInfo::getIssueTime);
        //查询结果
        Page<CmNoticeInfoVo> dcAuthorInfoPage = iCmNoticeMapper.selectVoPage(page, queryWrapper);

        return dcAuthorInfoPage;
    }
}
